3.6.10.3 hmwrite-半精度行列レジスタ書き込み
半精度データの行列レジスタへの書き込みを行う。
code:文法
hmwrite<src> $(l|ll)(x|y)<addr>
<src>は読み出し元PEオペランドであり、アクセス語長は長語または 2 長語である。アクセス語長は後述
の行列レジスタのアクセス語長と一致している必要がある。行列ベクトル積和演算を目的として書き込む場合
はブロックフロート半精度の値であり、行列転置読み出しを目的として書き込む場合は通常の半精度の値で
ある。
$(l|ll)(x|y)は書き込み先の行列レジスタオペランドである。
(l|ll)は行列レジスタへのアクセス語長を表す。
lではサイクルあたり 1 行、llではサイクルあたり 2 行に書き込む。
以下効果でwlとして参照する。
(x|y)はどちらの行列レジスタに書き込むかの指定であり、以下効果においてsideとして参照する。
<addr>は書き込みを開始する行番号である。
サイクルごとに連続する行を重複なくアクセスするようにインクリメントされる。
wlがllの場合はは 2 の倍数である必要がある。
半精度行列データは 16 行 16 列であるので、サイクルごとに 2 行ずつ書き込めば 2 命令で行列データ全体を行列レジスタに書き込むことができる。
code:効果
for cycle= 0:4
forall chip,l2b,l1b,mab
if wl==l
HalfWord src_data44 =MEMchipl2bl1bmab0:4.refer_pemem(src,cycle)
for j = 0:16
MEMchipl2bl1bmab.refer_matreg(side, HalfWord)(addr+cycle)%16j =
src_dataj/4j%4
elif wl== ll
HalfWord src_data48 =MEMchipl2bl1bmab0:4.refer_pemem(src,cycle)
for j = 0:16
MEMchipl2bl1bmab.refer_matreg(side, HalfWord)(addr+cycle*2)%16j =
src_dataj/4j%4
MEMchipl2bl1bmab.refer_matreg(side, HalfWord)(addr+cycle*2)%16+1j =
src_dataj/4j%4+4